/**
 * @author liuxin
 * @e-mail lxtobe5@gmail.com
 * @update 2011.11.16
 * @prompt If you find my mistake, please contact with me via my e-mail.
 */
package API_sample.flash.geom
{
	import flash.display.Sprite;
	import flash.geom.Point;

	public class Point_sample extends Sprite
	{
		/**
		 * Point 对象表示二维坐标系统中的某个位置，其中 x 表示水平轴，y 表示垂直轴。
		 * 以下类的方法和属性使用 Point 对象：
		 * flash.display.BitmapData
		 * flash.display.DisplayObject
		 * flash.display.DisplayObjectContainer
		 * flash.filters.DisplacementMapFilter
		 * flash.geom.Matrix
		 * flash.display.NativeWindow
		 * flash.geom.Rectangle
		 */
		public function Point_sample()
		{
			var point1:Point = new Point();
			trace(point1);  // (x=0, y=0)
			
			var point2:Point = new Point(6, 8);
			trace(point2); // (x=6, y=8)
			
			/*public static function interpolate(pt1:Point, pt2:Point, f:Number):Point
			确定两个指定点之间的点。参数 f 确定新的内插点相对于参数 pt1 和 pt2 指定的两个端点所处的位置。
			参数 f 的值越接近 1.0，则内插点就越接近第一个点（参数 pt1）。参数 f 的值越接近 0，则内插点就越接近
			第二个点（参数 pt2）。
			pt1:Point — 第一个点。
			pt2:Point — 第二个点。
			f:Number — 两个点之间的内插级别。表示新点将位于 pt1 和 pt2 连成的直线上的什么位置。如果 f=1，
			则返回 pt1；如果 f=0，则返回 pt2。*/
			trace(Point.interpolate(point1, point2, 0.5)); // (x=3, y=4)
			trace(Point.interpolate(point1, point2, 0.2)); // (x=4.8, y=6.4)
			
			/*public static function distance(pt1:Point, pt2:Point):Number
			返回 pt1 和 pt2 之间的距离。
			pt1:Point — 第一个点。
			pt2:Point — 第二个点。
			Number — 第一个点和第二个点之间的距离。*/
			trace(Point.distance(point1, point2)); // 10
			
			/*public function add(v:Point):Point
			将另一个点的坐标添加到此点的坐标以创建一个新点。
			v:Point — 要添加的点。
			Point — 新点。*/
			var point4:Point = new Point(2,5);
			trace(point4.add(point2)); // (x=8, y=13)
			
			/*public function clone():Point
			创建此 Point 对象的副本。
			Point — 新的 Point 对象。*/
			var point3:Point = point2.clone();
			
			/*public function equals(toCompare:Point):Boolean
			确定两个点是否相同。如果两个点具有相同的 x 和 y 值，则它们是相同的点。
			toCompare:Point — 要比较的点。
			Boolean — 如果该对象与此 Point 对象相同，则为 true 值，如果不相同，则为 false。*/
			trace(point2.equals(point3)); // true
			
			/*public function normalize(thickness:Number):void
			将 (0,0) 和当前点之间的线段缩放为设定的长度。
			thickness:Number — 缩放值。例如，如果当前点为 (0,5) 并且您将它规范化为 1，则返回的点位于 (0,1) 处。*/
			point3.normalize(2.5);
			trace(point3); // (x=1.5, y=2)
			
			/*public function subtract(v:Point):Point
			从此点的坐标中减去另一个点的坐标以创建一个新点。
			v:Point — 要减去的点。
			Point — 新点。*/
			trace(point2.subtract(point3)); // (x=4.5, y=6)
			
			/*public function offset(dx:Number, dy:Number):void
			按指定量偏移 Point 对象。dx 的值将添加到 x 的原始值中以创建新的 x 值。dy 的值将添加到 y 的原始值中以创建新的 y 值。
			dx:Number — 水平坐标 x 的偏移量。
			dy:Number — 垂直坐标 y 的偏移量。*/
			trace(point1.offset(2, 3)); // 
			
			/*public static function polar(len:Number, angle:Number):Point
			将一对极坐标转换为笛卡尔点坐标。
			len:Number — 极坐标对的长度。
			angle:Number — 极坐标对的角度（以弧度表示）。
			Point — 笛卡尔点。*/
			var angle:Number = Math.PI * 2 * (30 / 360); // 30 degrees
			trace(Point.polar(4, angle)) // (x=3.464101615137755, y=1.9999999999999998)   
			
			/*length	属性
			从 (0,0) 到此点的线段长度。*/
			trace(point3.length);  // 2.5
		}
	}
}